http://www.sitepoint.com/html5-ajax-file-upload/
אין בעיה להעלות קבצים עם שם באנגלית, אבל בקבצים בעברית לא נוצרת אפילו בקשת post
השליחה של הקבצים לשרת נעשית ע"י XMLHttpRequest();
ניסיתי לחפש ברשת פתרונות כמו להוסיף קידוד ל header אבל לא הצלחתי בשום נסיון
12 תשובות
תודה רבה זאת באמת הייתה הבעיה, ועכשיו בעיה חדשה שאני מקבל את שם הקובץ או ככה (ע"י שימוש ב encodeURI):
%D7%99%D7%95%D7%98%D7%99%D7%95%D7%91.jpg
או ככה (ע"י שימוש ב urldecode ב php):
׳™׳•׳˜׳™׳•׳‘.jpg
יש בעיה בקידוד. תנסה להוסיף את השורה הזאת בהתחלה:
שלחת את זה לסקריפט ה-PHP מטופס HTML? אם כן, תסדר את הקידוד שם (meta charset).
ה Html, js,php הם באותו קובץ ויש את התג <meta charset="utf-8">
כך נראה הבקשה בדפדפן:
וגם ניסיתי עכשיו לעשות replace לכל אות ואות ב php למשל
ועדיין זה מחזיר לי סימנים מוזרים, אין לי מושג יש פה כנראה איזו טעות בקידוד של הדף
function decodeToHebrew($filename)
{
$filename = str_replace("%D7%90", "א", $filename);
$filename = str_replace("%D7%91", "ב", $filename);
$filename = str_replace("%D7%92", "ג", $filename);
$filename = str_replace("%D7%93", "ד", $filename);
$filename = str_replace("%D7%94", "ה", $filename);
$filename = str_replace("%D7%95", "ו", $filename);
$filename = str_replace("%D7%96", "ז", $filename);
$filename = str_replace("%D7%97", "ח", $filename);
$filename = str_replace("%D7%98", "ט", $filename);
$filename = str_replace("%D7%99", "י", $filename);
$filename = str_replace("%D7%9B", "כ", $filename);
$filename = str_replace("%D7%9A", "ך", $filename);
$filename = str_replace("%D7%9C", "ל", $filename);
$filename = str_replace("%D7%9E", "מ", $filename);
$filename = str_replace("%D7%9D", "ם", $filename);
$filename = str_replace("%D7%A0", "נ", $filename);
$filename = str_replace("%D7%9F", "ן", $filename);
$filename = str_replace("%D7%A1", "ס", $filename);
$filename = str_replace("%D7%A2", "ע", $filename);
$filename = str_replace("%D7%A4", "פ", $filename);
$filename = str_replace("%D7%A3", "ף", $filename);
$filename = str_replace("%D7%A6", "צ", $filename);
$filename = str_replace("%D7%A5", "ץ", $filename);
$filename = str_replace("%D7%A7", "ק", $filename);
$filename = str_replace("%D7%A8", "ר", $filename);
$filename = str_replace("%D7%A9", "ש", $filename);
$filename = str_replace("%D7%AA", "ת", $filename);
return $filename;
}
$fn = (isset($_SERVER['HTTP_X_FILENAME']) ? $_SERVER['HTTP_X_FILENAME'] : false);
if ($fn)
{
// AJAX call
file_put_contents('./uploads/' . decodeToHebrew($fn), file_get_contents('php://input'));
echo "$fn uploaded";
exit();
}
if (isset($_FILES['fileselect']))
{
// form submit
$files = $_FILES['fileselect'];
foreach ($files['error'] as $id => $err)
{
if ($err == UPLOAD_ERR_OK)
{
$fn = $files['name'][$id];
move_uploaded_file($files['tmp_name'][$id],'uploads/' . $fn);
echo "<p>File $fn uploaded.</p>";
}
}
}
?>
קודם כל, תוותר על הפונקציה decodeToHebrew ותשתמש בפונקציה rawurldecode המובנית. הבעיה היא לא שם, כמו שאתה יכול לראות.
אני לא רואה כאן את ה-Header של הקידוד. הוספת אותו לפני זה?
קצת מביך, אבל עבר לא מעט זמן מאז שהתעסקתי בפיתוח אינטרנט. מחיפוש שלי בגוגל על העלאת קבצים באמצעות AJAX לא ראיתי טיפול שונה ב-PHP עם HTTP_X_FILENAME וכל זה. מה הקטע של זה?
החלפתי ל rawurlencode אבל זה עדיין מביא לי את הסימנים המוזרים. הקידוד נמצא באמת בראש הדף של ה php
את האמת אין לי מושג למה דווקא ב HTTP_X_FILENAME , זה פשוט מה שהיה במדריך
אם הקידוד של קובץ ה-PHP ושל קובץ ה-HTML שממנו בוצעה קריאת ה-AJAX זה UTF-8, אני לא יודע מה הבעיה. יכול להיות שאחרים יוכלו לענות על זה.
ייתכן שבעיית הקידוד מצומצמת איכשהו לנתון ה-HTTP_X_FILENAME או לקבוצת נתונים מסוימת שהוא כלול בה. חפש בגוגל מדריכים אחרים להעלאת קבצים; אני די בטוח ש-HTTP_X_FILENAME הוא לא חלק מהתהליך הסטנדרטי להעלאת קבצים, ומשום מה אני לא מצליח למצוא שום דבר רשמי על זה. ><
עריכה:
לפי מה שאני מבין (ואני לא כל כך בטוח בזה) הקידוד כנראה יהיה זהה לקידוד של הקובץ שאתה מעלה. כך שאתה יכול להמיר את זה ל-UTF8:
או
אבל חייב להיות פתרון טוב יותר (לא שאני בטוח שזה שאמרתי בכלל עובד). אני מקווה שמישהו שמבין בזה יותר יפתור לך את הבעיה.
קשה לי לדבג את זה ככה. תוכל להעלות את הקובץ לאנשהו ואני אעבור עליו ואדבג אותו?
תוכל לשלוח לי לאימייל: [email protected]
משום מה נורא מבלבל אותי כל הנושא הזה.